/**
 * 2010(c) Copyright Oceansoft Information System Co.,LTD. All rights reserved.
 * <p>
 * Compile: JDK 1.6+
 * <p>
 * 版权所有(C)：江苏欧索软件有限公司
 * <p>
 * 公司名称：江苏欧索软件有限公司
 * <p>
 * 公司地址：中国苏州科技城青山路1号
 * <p>
 * 网址: http://www.oceansoft.com.cn
 * <p>
 * 版本: 苏州公安统一用户管理平台1.0
 * <p>
 * 作者: 090922(陈伟)
 * <p>
 * 文件名:IUUMSRoleServiceImpl.java
 * <p>
 * 类产生时间: 2012-7-11 下午2:30:53
 * <p>
 * 负责人: 090922(陈伟)
 * <p>
 * Email:javacspring@gmail.com
 * <p>
 * 所在组 : 苏州公安统一用户管理平台
 * <p>
 * 所在部门: 电信/国土——技术二部
 * <p>
 * <p>
 */
package com.oceansoft.core.service.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import com.hui.platform.system.utility.StringUtil;
import com.oceansoft.core.common.constant.Constant;
import com.oceansoft.core.common.util.Pagination;
import com.oceansoft.core.dao.IUUMSRoleDao;
import com.oceansoft.core.domain.Message;
import com.oceansoft.core.domain.RoleResource;
import com.oceansoft.core.domain.SysRole;
import com.oceansoft.core.domain.SysUser;
import com.oceansoft.core.service.IUUMSRoleService;

/**
 * 统一用户管理平台系统角色业务接口实现类
 * 
 * @author chenw
 * 
 */
@Service
@Transactional
public class UUMSRoleServiceImpl implements IUUMSRoleService {
	@Resource
	private IUUMSRoleDao uumsRoleDao;
//	@Resource
//	private IManagerDao managerDao;

	@Override
	public Pagination<SysRole> findRolesByPage(int pageIndex) {
		return uumsRoleDao.findRoleByPage(pageIndex);
	}

	@Override
	public Pagination<SysRole> findRolesByPage(SysRole condition, int pageIndex) {
		return uumsRoleDao.findRoleByPage(condition, pageIndex);
	}

	@Override
	public Map<String, Object> findRoleByUser(String policeNum) {
		return uumsRoleDao.findRoleByUser(policeNum);
	}

	@Override
	public List<SysUser> findUsersByRoleId(String roleId) {
		return uumsRoleDao.findUsersByRoleId(roleId);
	}

	@Override
	@Transactional(rollbackFor = Exception.class)
	public Message saveRoleUserData(String roleId, String[] userIds) {
		Message msg = new Message("用户角色数据保存功！");
		uumsRoleDao.deleteRoleById(roleId);
		List<Object[]> data = new ArrayList<Object[]>();
		for (String uid : userIds) {
			if (StringUtils.hasText(roleId) && StringUtils.hasText(uid)) {
				String[] obj = new String[2];
				obj[0] = roleId;
				obj[1] = uid;
				data.add(obj);
			}
		}
		uumsRoleDao.saveRoleUserData(data);
//		//对于不在管理员表的插入到管理员表
//		Set<String> managers = new HashSet<String>();
//		for(String userId:userIds){
//			if(StringUtils.hasLength(userId)){
//				int count = managerDao.findCountByPoliceNum(userId);
//				if(count==0){
//					managers.add(userId);
//				}
//			}
//		}
//		if(managers.size()>0){
//			managerDao.saveAdd(managers);
//			if(Constant.UUMS_DEPT_ROLE_ID.equals(roleId)){
//				List<Object[]> list = new ArrayList<Object[]>();
//				for(String policenum:managers){
//					list.add(new Object[]{Constant.UUMS_DEPT_ROLE_ID,policenum});
//				}
//				uumsRoleDao.saveRoleUserData(list);
//			}
//		}
		return msg;
	}

	@Override
	public SysRole findRoleById(String roleId) {
		return uumsRoleDao.findRoleById(roleId);
	}

	@Override
	public int saveOrUpdateRole(SysRole role) {
		int count = uumsRoleDao.findCountByName(role);
		if(count>0)
			return 1;
		if (StringUtils.hasText(role.getRcode()) && "0".equals(role.getRcode())) {
			uumsRoleDao.saveRole(role);
		} else {
			uumsRoleDao.update(role);
		}
		return 0;
	}

	@Override
	@Transactional(rollbackFor = Exception.class)
	public void saveRoleResource(RoleResource roleResource) {
		uumsRoleDao.deleteRoleResource(roleResource.getRoleId());
		List<Object[]> list = new ArrayList<Object[]>();
		for (String res : roleResource.getResId().split(",")) {
			if (StringUtils.hasText(res) && StringUtils.hasText(roleResource.getRoleId())) {
				Object[] _obj = new String[] { roleResource.getRoleId(), res };
				list.add(_obj);
			}
		}
		uumsRoleDao.saveRoleResource(list);
	}

	@Override
	public Message deleteSysRoleRById(String roleId) {
		Message msg = new Message("系统角色删除成功！");
		boolean allow_del1 = uumsRoleDao.findRoleUserRowsByRoleId(roleId) > 0 ? false : true;
		boolean allow_del2 = uumsRoleDao.findRoleResourceRowsByRoleId(roleId) > 0 ? false : true;
		if (allow_del1) {
			if (allow_del2) {
				uumsRoleDao.deleteResourceById(roleId);
			} else {
				msg.setStatus(Constant.RESULT_FAILD);
				msg.setBody("该角色已被系统资源引用，请移除所有引用资源后再删除！");
			}
		} else {
			msg.setStatus(Constant.RESULT_FAILD);
			msg.setBody("该角色已分配有人员，请移除所有人员后再删除！");
		}
		return msg;
	}

	@Override
	public List<SysRole> findAllRoles() {
		return uumsRoleDao.findAllRoles();
	}

	@Override
	public List<SysRole> findRoles(String policeNum) {
		return uumsRoleDao.findRoles(policeNum);
	}

	@Override
	@Transactional(rollbackFor = Exception.class)
	public Message plusAddRoleToUser(String userid, String roleId) {
		Message msg = new Message("用户角色数据保存功！");
		uumsRoleDao.delRoleUser(userid);
		String roleid[]=roleId.split(",");
		for(String rolid:roleid)
		{
			if(StringUtil.isNotNull(rolid))
			{
				uumsRoleDao.plusAddRoleToUser(userid,rolid);
			}
		}
		return  msg;
	}
}
